﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LojaEmDia.Negocio;
using System.Data.Linq.SqlClient;

namespace LojaEmDia.Negocio.Dominio
{
    class DominioProduto : DominioBase
    {
        private static DominioProduto _instancia;
        Repository<PRODUTO, ModeloLojaContainer> _Repository = null;

        private DominioProduto()
        {
            _Repository = new Repository<PRODUTO, ModeloLojaContainer>(this.Contexto);
            _Repository.KeyProperty = "COD_PRODUTO";
        }

        public static DominioProduto Me
        {
            get {

                if (_instancia == null)
                    _instancia = new DominioProduto();
                return _instancia;
            }
        }


        public List<PRODUTO> Listar()
        {
            var query = (from _clientes in this.Contexto.PRODUTO
                         select _clientes);

            return query.ToList();

        }




        internal IList<PRODUTO> Listar(int pagina, int quantidadeRegistros)
        {
            System.Linq.Expressions.Expression<Func<PRODUTO, object>> sortexpression = e => e.NOM_PRODUTO;
            return _Repository.SelectAll(sortexpression, quantidadeRegistros, pagina * quantidadeRegistros);
        }

        internal void Salvar(PRODUTO item)
        {
            this.Contexto.PRODUTO.AddObject(item);
            this.Contexto.SaveChanges();
        }

       

        internal List<PRODUTO> PesquisarPorNome(string nome)
        {

            var query = (from c in this.Contexto.PRODUTO
                         where c.NOM_PRODUTO.StartsWith( nome.Trim())
 
                         select c);

            return query.ToList();
        }

        internal void Salvar(List<PRODUTO> list)
        {
            foreach (PRODUTO c in list)
            {
                if (c.COD_PRODUTO == 0)
                    this.Contexto.PRODUTO.AddObject(c);
            }
            this.Contexto.SaveChanges();

        }

        internal PRODUTO ObterPorCodigoBarra(string codigoBarra)
        {
            var query = (from c in this.Contexto.PRODUTO
                         where c.COD_BARRA == codigoBarra
                         select c);

            return query.SingleOrDefault();
        }
    }
}
